Many computers can implement virtual machines, each having a virtualization environment to simulate or emulate computer hardware and allow execution of software or an operating system on that simulated or emulated computer hardware. These computers can include hypervisors to create and run the virtualization environments for the virtual machines in the computer. In some instances, the hypervisor can be a Quick Emulator (QEMU) to emulate computer hardware having a different architecture than the underlying computer, which can allow for execution of software applications and guest operating systems.
The computer and associated hypervisors can implement different types of virtualization environments, such as a full virtualization environment or para-virtualization environment. In the full virtualization environment, the computer can run or execute an unmodified version of a guest operating system on the simulated or emulated computer hardware. In the para-virtualization environment, the guest operating system running on the simulated or emulated computer hardware can be modified to allow interaction or communication with the hypervisor through a virtual interface.
The virtual interface can include a para-virtualized or front-end driver to exchange data packets between the virtual machines and at least one virtual buffer. The virtual interface also can include a back-end driver to exchange data packets between the virtual buffer and the hypervisor. For example, when the virtual machine includes a data packet to transmit to the hypervisor, the front-end driver can store the data packet to the virtual buffer in the virtual interface and the back-end driver can consume or load the data packet from the virtual buffer and provide it to the hypervisor.
The hypervisor can exchange the data packets with a host program implemented on the computers. When the virtual machine implements a packet generation application to exchange network traffic with a design under test in a verification system, the host program can exchange the data packets to the verification system.
In some implementations, the back-end driver may consume data packets from the virtual buffer at a slower rate than the front-end driver adds data packets to the virtual buffer. In these implementations, the virtual interface between the virtual machine and the hypervisor may drop one or more of the data packets or the hypervisor may drop one or more of the data packets exchanged between the virtual interface and the host program. For example, when the virtual machine implements a packet generation application to exchange network traffic to the design under test in the verification system, the packet generation application may erroneously consider a drop of one or more data packets by the virtual interface or the hypervisor as a bug in the design under test.